﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ProgNetComponents.Data;
using DevExpress.XtraEditors;

namespace Wydatki.Setup
{
    public partial class FormProdukty : MyBaseSqlCeGridForm
    {
        public FormProdukty()
        {
            InitializeComponent();
        }

        protected override bool ValidateAll()
        {
            return base.ValidateAll() && produktyDataSet.STP_PRODUKTY.ValidateColUnique("STP_PROD_NAZWA", "Nazwa powinna być unikalna");
        }

        private void bbiPrzepisanieProduktow_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (this.modeProvider1.CurrentMode == ProgNetComponentsDx.Enums.FormMode.Edit)
                EditClick();
            if (modeProvider1.CurrentMode == ProgNetComponentsDx.Enums.FormMode.Read)
            {
                Tools.ProduktMatch form = new Tools.ProduktMatch();
                form.ShowDialog();
            }
        }

        private void bbiKasujNieuzywane_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (this.modeProvider1.CurrentMode == ProgNetComponentsDx.Enums.FormMode.Edit)
                EditClick();
            if (modeProvider1.CurrentMode == ProgNetComponentsDx.Enums.FormMode.Read)
            {
                DataManager m = selectDataProvider1.GetDataManager();
                int i = m.ExecuteScalar("SELECT COUNT(*) FROM STP_PRODUKTY WHERE NOT EXISTS (SELECT 1 FROM WRK_WYDATKI_PRODUKTY WHERE WRK_WYD_PROD_PRODUKT = STP_PROD_ID)").AsInt();
                if (i > 0)
                {
                    if (this.ShowDxYNQuestionDialog("Liczba nieużywanych produktów: " + i + "\nChcesz je skasować?") == System.Windows.Forms.DialogResult.Yes)
                    {
                        m.ExecuteNonQuery("DELETE FROM STP_PRODUKTY WHERE NOT EXISTS (SELECT 1 FROM WRK_WYDATKI_PRODUKTY WHERE WRK_WYD_PROD_PRODUKT = STP_PROD_ID)");
                        this.ShowDxInfoDialog("Nieużywane produkty zostały skasowane.");
                        this.GetRecords();
                    }
                }
                else
                {
                    this.ShowDxInfoDialog("Brak nieużywanych produktów.");
                }
            }
        }

        private void repositoryItemMultiSelectGridEdit1_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            BaseEdit edit = sender as BaseEdit;
            if (edit != null && edit.EditValue!=null)
            {
                changeDetectorProvider1.CheckChanges(edit.EditValue, e.OldValue, e.NewValue);
            }
        }
        private string _Nazwa;
        public string Nazwa
        {
            get { return _Nazwa; }
            set
            {
                _Nazwa = value;
                gvMain.RefreshData();
            }
        }
        private object _Kategoria;
        public object Kategoria
        {
            get { return _Kategoria; }
            set
            {
                _Kategoria = value;
                gvMain.RefreshData();
            }
        }
        private void teNazwa_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            Nazwa = e.NewValue.AsString();
        }

        private void lueKategoria_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            Kategoria = e.NewValue;
        }

        private void gvMain_CustomRowFilter(object sender, DevExpress.XtraGrid.Views.Base.RowFilterEventArgs e)
        {
            if (this.produktyDataSet.STP_PRODUKTY.Rows.Count >= e.ListSourceRow)
            {
                DataRow r = produktyDataSet.STP_PRODUKTY.Rows[e.ListSourceRow];
                if (r.RowState != DataRowState.Deleted)
                {
                    bool visible = true;
                    if (Kategoria.IsNotNull())
                    {
                        if (!produktyDataSet.STP_PROD_KAT.RowExists("STP_PRODK_KATEGORIA = " + Kategoria.AsString() + " AND STP_PRODK_PRODUKT = " + r["STP_PROD_ID"]))
                            visible = false;
                    }
                    if (Nazwa.IsNotNull())
                    {
                        if (!r["STP_PROD_NAZWA"].AsString().XMatch(".*" + Nazwa.XEscape() + ".*"))
                            visible = false;
                    }
                    if (!visible)
                    {
                        e.Handled = true;
                        e.Visible = false;
                    }
                }
            }
        }
    }
}
